package com._51doit.day01.xingge例子;

import java.util.ArrayList;
import java.util.List;

public class MyList {

    private List<Integer> lst;

    public MyList(List<Integer> lst) {
        this.lst = lst;
    }

    public List<Integer> map(MapFunction func) {
        //定义一个新的集合（放新的数据）
        ArrayList<Integer> nList = new ArrayList<>();
        //遍历原来的集合
        for (Integer in : lst) {
            //应用外部传入的计算逻辑（引用）
            Integer out = func.invoke(in);
            //将新的结果添加到新的List中
            nList.add(out);
        }
        //返回新的List
        return nList;

    }

    public List<Integer> filter(FilterFunction func) {
        //定义一个新的List
        ArrayList<Integer> nList = new ArrayList<>();
        //遍历原来lst中的数据
        for (Integer in : lst) {
            //应用外部的过滤逻辑
            boolean flag = func.apply(in);
            if (flag) {
                //将符合条件的数据添加到新的List中
                nList.add(in);
            }
        }
        //返回新的List
        return nList;
    }

    public Integer reduce(ReduceFunction func) {
        //遍历原来集合中的每一个元素
        Integer temp = 0;
        boolean isFirst = true;
        for (Integer i : lst) {
            if (isFirst) {
                temp = i;
                isFirst = false;
            } else {
                temp = func.apply(temp, i);
            }
        }
        //返回最终相加完的结果
        return temp;

    }
}
